// import { message } from "ant-design-vue";
import { userStore } from "@/store/modules/userStore";
import { wsPointMap } from "@/utils/ws_map";
import WebSocket from "tauri-plugin-websocket-api";

const TIME: number = 4000;
let time: any;

function dealData(msg: any) {
  if (!msg) {
    console.log(msg?.msg || "推送数据为空");
  } else {
    let arr = (msg.deviceStatus || []).sort(
      (a: any, b: any) =>
        Number(a.devicePoint?.at(-1) || 0) - Number(b.devicePoint?.at(-1) || 0)
    );
    console.log("---排序后arr:-----", arr);
    let results: any = [];
    arr.forEach((obj: any) => {
      let node: any = wsPointMap[obj.deviceCode];

      if (!node) {
        // message.error("Ws推送的设备编号不存在！");
        return;
      }

      const inc = results.find(
        (v: any) =>
          v.currentComName === node.currentComName && v.index === node.index
      );

      if (inc) {
        return;
      }

      results.push({
        index: node.index,
        currentComName: node.currentComName,
        deviceCode: obj?.deviceCode,
        devicePoint: obj.devicePoint,
        value: obj.value,
      });

      if (node.link?.length) {
        node.link.forEach((index: any) => {
          const newObj = arr.find(
            (v: any) =>
              v.deviceCode === obj.deviceCode &&
              v.devicePoint !== obj.devicePoint
          );
          results.push({
            index: index,
            currentComName: node.currentComName,
            deviceCode: newObj?.deviceCode,
            devicePoint: newObj?.devicePoint,
            value: newObj?.value,
          });
        });
      }
    });
    const userstore = userStore();
    console.log("---result:-----", results);
    userstore.changeWsOperateList(results);
  }
}

//test
// setTimeout(() => {
//   dealData({
//     deviceStatus: [
//       {
//         deviceCode: "1-016",
//         value: 0,
//       },
//       {
//         deviceCode: "1-024",
//         value: 0,
//       },
//       {
//         deviceCode: "2-016",
//         value: 0,
//       },
//       {
//         deviceCode: "2-017",
//         value: 0,
//       },
//       {
//         deviceCode: "2-039",
//         value: 0,
//       },
//       {
//         deviceCode: "2-040",
//         value: 0,
//       },
//       {
//         deviceCode: "2-055",
//         value: 0,
//       },
//       {
//         deviceCode: "2-056",
//         value: 0,
//       },
//       {
//         deviceCode: "2-072",
//         value: 0,
//       },
//       {
//         deviceCode: "2-073",
//         value: 0,
//       },
//       {
//         deviceCode: "2-170",
//         devicePoint: "01030133",
//         value: 1,
//       },
//       {
//         deviceCode: "2-170",
//         devicePoint: "01030134",
//         value: 0,
//       },
//       {
//         deviceCode: "2-177",
//         devicePoint: "N01L1M07",
//         value: 0,
//       },
//       {
//         deviceCode: "2-177",
//         devicePoint: "N01L1M08",
//         value: 0,
//       },
//       {
//         deviceCode: "5-018",
//         value: 0,
//       },
//       {
//         deviceCode: "5-019",
//         value: 0,
//       },
//       {
//         deviceCode: "9-013",
//         value: 0,
//       },
//       {
//         deviceCode: "9-040",
//         value: 0,
//       },
//       {
//         deviceCode: "9-046",
//         value: 0,
//       },
//       {
//         deviceCode: "9-057",
//         value: 0,
//       },
//       {
//         deviceCode: "9-162",
//         devicePoint: "N01L1M09",
//         value: 0,
//       },
//       {
//         deviceCode: "9-162",
//         devicePoint: "N01L1M10",
//         value: 0,
//       },
//       {
//         deviceCode: "9-165",
//         devicePoint: "01030135",
//         value: 0,
//       },
//       {
//         deviceCode: "9-165",
//         devicePoint: "01030136",
//         value: 0,
//       },
//       {
//         deviceCode: "AFC设备室",
//         devicePoint: "N01L1M21",
//         value: 0,
//       },
//       {
//         deviceCode: "AFC设备室",
//         devicePoint: "N01L1M22",
//         value: 0,
//       },
//       {
//         deviceCode: "环控电控室3",
//         devicePoint: "01030147",
//         value: 0,
//       },
//       {
//         deviceCode: "环控电控室3",
//         devicePoint: "01030148",
//         value: 0,
//       },
//       {
//         deviceCode: "环控电控室3",
//         devicePoint: "01030149",
//         value: 0,
//       },
//       {
//         deviceCode: "环控电控室3",
//         devicePoint: "01030150",
//         value: 0,
//       },
//       {
//         deviceCode: "环控电控室3",
//         devicePoint: "01030151",
//         value: 0,
//       },
//     ],
//   });
// }, 12000);
export class WS {
  private wsUrl = import.meta.env.VITE_APP_SOCKET;
  private ws: any;

  async start() {
    try {
      const vm = this;
      const websocket = await WebSocket.connect(`${this.wsUrl}`)
        .then((r) => {
          console.log("-----Connected-----");
          return r;
        })
        .catch((e) => {
          console.log("-----Connected Fails-----");
          console.log(e);
          //重连
          time = setTimeout(() => {
            vm.start();
          }, TIME);
        });
      this.ws = websocket;
    } catch (e) {
      console.log(e);
    }

    this.ws.addListener((message: any) => {
      if (message.type === "Text") {
        try {
          const msg = JSON.parse(message.data);
          console.log("--------onmessage----------", msg);
          dealData(msg);
        } catch (error) {
          console.error(e);
        }
      }
    });
  }

  stop() {
    this.ws?.disconnect();
    this.ws = null;
    clearTimeout(time);
  }
}
export default new WS();
